local parent = debugstack():match[[\AddOns\(.-)\]]
local global = GetAddOnMetadata(parent, 'X-oUF')
assert(global, 'X-oUF needs to be defined in the parent add-on.')
local oUF = _G[global]

do
	local Update = function(self, event)
		if(IsResting()) then
			self.Resting:Show()
		else
			self.Resting:Hide()
		end
	end

	local Enable = function(self, unit)
		if(self.Resting and unit == 'player') then
			self:RegisterEvent("PLAYER_UPDATE_RESTING", Update)

			if(self.Resting:IsObjectType"Texture" and not self.Resting:GetTexture()) then
				self.Resting:SetTexture[[Interface\CharacterFrame\UI-StateIcon]]
				self.Resting:SetTexCoord(0, .5, 0, .421875)
			end

			return true
		end
	end

	local Disable = function(self)
		if(self.Resting) then
			self:UnregisterEvent("PLAYER_UPDATE_RESTING", Update)
		end
	end

	oUF:AddElement('Resting', Update, Enable, Disable)
end

do
	local Update = function(self, event)
		if(UnitAffectingCombat"player") then
			self.Combat:Show()
		else
			self.Combat:Hide()
		end
	end

	local Enable = function(self, unit)
		if(self.Combat and unit == 'player') then
			self:RegisterEvent("PLAYER_REGEN_DISABLED", Update)
			self:RegisterEvent("PLAYER_REGEN_ENABLED", Update)

			if(self.Combat:IsObjectType"Texture" and not self.Combat:GetTexture()) then
				self.Combat:SetTexture[[Interface\CharacterFrame\UI-StateIcon]]
				self.Combat:SetTexCoord(.5, 1, 0, .5)
			end

			return true
		end
	end

	local Disable = function(self)
		if(self.Combat) then
			self:UnregisterEvent("PLAYER_REGEN_DISABLED", Update)
			self:UnregisterEvent("PLAYER_REGEN_ENABLED", Update)
		end
	end

	oUF:AddElement('Combat', Update, Enable, Disable)
end
